package com.xianyu.ssoserver.model.ticket;

import com.menghao.sso.server.model.Service;
import com.menghao.sso.server.model.validation.Authentication;
import com.menghao.sso.server.registry.ExpirationPolicy;

import java.util.List;

/**
 * 票证授予票的接口。一个TGT是主要进入Service
 */
public interface TicketGrantingTicket extends Ticket {

    /**
     * 应用于生成TGT的前缀.
     */
    String PREFIX = "TGT";

    /**
     * 获取对应的身份信息.
     */
    Authentication getAuthentication();

    /**
     * 为对应的Service赋予ST
     *
     * @param id      Ticket的ID.
     * @param service 待授予Ticket的Service
     */
    ServiceTicket grantServiceTicket(String id, Service service, ExpirationPolicy expirationPolicy);

    /**
     * 使票据过期
     */
    void expire();

    /**
     * 是否是根
     */
    boolean isRoot();

    /**
     * 为此TGT找到对应的身份列表
     */
    List<Authentication> getChainedAuthentications();
}
